home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / DCLAP 6d / dclap6d / DBio / DAsmSequence.cpp < prev    next >
Text File  |  1996-07-05  |  5KB  |  223 lines

  1. // DAsmSequence.cp 
  2. // d.g.gilbert
  3.  
  4.  
  5.  
  6. #include "DAsmSequence.h"
  7. #include "DSeqFile.h"
  8. #include "DSeqList.h"
  9. #include "DREnzyme.h"
  10. #include <ncbi.h>
  11. #include <dgg.h>
  12. #include <DUtil.h>
  13. #include <DFile.h>
  14. #include "ureadseq.h"
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21. // DAsmSequence -----------------
  22.  
  23.  
  24. DAsmSequence::DAsmSequence()
  25. {
  26.     fTrace= NULL;  
  27.     fTFName= NULL;
  28.   fNTrace= 0;
  29.   fMaxTrace= 0;
  30.   fTrCenter= NULL;
  31.   fTrlength= 0;
  32.     fShowTrace= TRUE;
  33.     fKind= kAutoseq;  
  34.     for (short t=0; t<4; t++) fMaxHeight[t]= 0;
  35. }
  36.  
  37. DAsmSequence::~DAsmSequence()  
  38. {
  39.     delete[] fTrace; //MemFree(fTrace);
  40.     MemFree(fTrCenter);
  41.     MemFree(fTFName);
  42. }
  43.  
  44. DObject* DAsmSequence::Clone() // override 
  45. {    
  46.     DAsmSequence* aSeq= (DAsmSequence*) DSequence::Clone();
  47.     aSeq->fTrace= NULL;  aSeq->SetTrace( fTrace, fNTrace, fMaxTrace, true);  
  48.     aSeq->fTrCenter= NULL; aSeq->SetTrCenter( fTrCenter, fTrlength, true); 
  49.     aSeq->fTFName= StrDup( fTFName);    
  50.     return aSeq;
  51. }
  52.  
  53. void DAsmSequence::CopyContents( DAsmSequence* fromSeq)
  54. {
  55.     DSequence::CopyContents( fromSeq);
  56.     fTFName= StrDup(fromSeq->fTFName);
  57.     SetTrace( fromSeq->fTrace, fromSeq->fNTrace, fromSeq->fMaxTrace, true);  
  58.     SetTrCenter( fromSeq->fTrCenter, fromSeq->fTrlength, true); 
  59. }
  60.  
  61. const char* DAsmSequence::TracefileName() 
  62.     return fTFName;
  63. }
  64.  
  65. void DAsmSequence::SetTracefileName(char* name) 
  66.     MemFree( fTFName);
  67.     fTFName= StrDup( name);
  68. }
  69.  
  70. TraceBase DAsmSequence::TraceAt(long item) 
  71.     TraceBase tr;
  72.     if (item >=0 && item <= fNTrace) return fTrace[item];
  73.     else return tr;
  74. }
  75.  
  76. void DAsmSequence::SetTraceAt(long item, TraceBase tr) 
  77.     if (item >=0 && item <= fNTrace) fTrace[item] = tr;
  78. }
  79.  
  80. void DAsmSequence::TraceToBases() 
  81.     if (fNTrace && fTrace) {
  82.         char *buf = (char*) MemNew( fNTrace+1);
  83.         long    i, len= 0;
  84.         for (i=0; i<fNTrace; i++)  
  85.             if (fTrace[i].base > ' ')  
  86.                 buf[len++]= fTrace[i].base;
  87.         buf[len]= 0;
  88.         buf= (char*) MemMore( buf, len+1); // size down
  89.         SetBases( buf, false);
  90.         }
  91. }
  92.  
  93. short DAsmSequence::MaxHeight(short trace) 
  94.     if (trace>=0 && trace<4) return fMaxHeight[trace];
  95.     else {
  96.         short maxt= 0;
  97.         for (short t=0; t<4; t++) if (fMaxHeight[t]>maxt) maxt= fMaxHeight[t];
  98.         return maxt;
  99.         }
  100. }
  101.  
  102. void  DAsmSequence::SetMaxHeight(short trace, short max) 
  103.     if (trace>=0 && trace<4) fMaxHeight[trace]= max; 
  104. }
  105.  
  106. void DAsmSequence::SetTrCenter( short*& theTrCenter, long trlength, Boolean duplicate)
  107. {
  108.     ulong bytesize= trlength * sizeof(short);
  109.     if (fTrCenter) { 
  110.         if (fTrlength>0 && 
  111.             (fTrlength != trlength || MemCmp( theTrCenter, fTrCenter, bytesize)!= 0))
  112.                 fChanged= TRUE;
  113.         MemFree(fTrCenter); 
  114.         fTrCenter= NULL; 
  115.         fTrlength= 0;
  116.         }
  117.     if (theTrCenter) {
  118.         if (duplicate) fTrCenter = (short*) MemDup(theTrCenter, bytesize); 
  119.         else { fTrCenter= theTrCenter; theTrCenter= NULL; }
  120.         fTrlength= trlength;  
  121.         }
  122.     fModTime= gUtil->time();
  123. }
  124.  
  125.  
  126. void DAsmSequence::UpdateTrace( TraceBase*& theTrace, long npoints, long maxtrace)
  127. {
  128.     ulong bytesize= npoints * sizeof(TraceBase);
  129.     
  130.     if (theTrace && theTrace != fTrace) {
  131.         SetTrace( theTrace, npoints, maxtrace, false);
  132.         theTrace= fTrace;
  133.         return;
  134.         }
  135.     
  136.     if (maxtrace > fMaxTrace) {
  137.         TraceBase* tmpb= new TraceBase[ maxtrace];
  138.         if (!tmpb) return;
  139.         if (fTrace && bytesize) {
  140.             MemCpy( tmpb, fTrace, bytesize);
  141.             delete[] fTrace;
  142.             }
  143.         fTrace= tmpb;
  144.         theTrace= fTrace;
  145.         fMaxTrace= maxtrace;
  146.         }
  147.     // ?? reduce fTrace if (maxtrace < fMaxTrace) ??
  148.  
  149.     fNTrace= Min( fMaxTrace, npoints);
  150.     fModTime= gUtil->time();
  151. }
  152.  
  153.  
  154. void DAsmSequence::SetTrace( TraceBase*& theTrace, long npoints, long maxtrace,
  155.                             Boolean duplicate)
  156. {
  157.     ulong bytesize= npoints * sizeof(TraceBase);
  158.     if (fTrace) { 
  159.         if (fNTrace>0 && 
  160.             (fNTrace != npoints || MemCmp( theTrace, fTrace, bytesize)!= 0))
  161.                 fChanged= TRUE;
  162.         delete[] fTrace;  //MemFree(e);  
  163.         fTrace= NULL; 
  164.         fNTrace= 0;
  165.         fMaxTrace= 0; 
  166.         }
  167.     if (theTrace) {
  168.         if (duplicate) {
  169.             fTrace = new TraceBase[ maxtrace];
  170.             MemCpy( fTrace, theTrace, bytesize);
  171.             }
  172.         else { fTrace= theTrace; theTrace= NULL; }
  173.         fNTrace= npoints;   
  174.         fMaxTrace= maxtrace; 
  175.         }
  176.     fModTime= gUtil->time();
  177. }
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184. void DAsmSequence::DoWrite(DFile* aFile, short format)
  185. {  
  186.     DSequence::DoWrite( aFile, format);
  187. #if 0    
  188.     if (fLength>0) {
  189.         DSeqFile::WriteSeqWrapper( aFile, fBases, fLength, format, fName);
  190.         if (fMasks && fMasksOk && DSeqFile::gWriteMasks) 
  191.             DSeqFile::WriteMaskWrapper( aFile, fMasks, fLength, format, fName);
  192.         }
  193. #endif
  194. }
  195.  
  196.  
  197. void DAsmSequence::DoWriteSelection(DFile* aFile, short format)
  198. {
  199.     DSequence::DoWriteSelection( aFile, format);
  200. #if 0    
  201.     if (fSelBases==0) 
  202.         DoWrite( aFile, format);
  203.     else if (fLength>0) {
  204.         long aStart= Min( fSelStart, fLength);
  205.         long aLength= Min( fSelBases, fLength - fSelStart);
  206.         DSeqFile::WriteSeqWrapper(  aFile, fBases+aStart, aLength, format, fName);
  207.         if (fMasks && fMasksOk && DSeqFile::gWriteMasks)  
  208.             DSeqFile::WriteMaskWrapper( aFile, fMasks+aStart, aLength, format, fName);
  209.         }
  210. #endif
  211. }
  212.  
  213.  
  214.  
  215.  
  216.